const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const { createDBConnection } = require('./db');
const { createRouters } = require('./routerFactory');

/**
 * 创建并启动 Express 服务器
 * @param {Object} config 数据库配置
 * @returns {Object} Express 应用实例
 */
function createServer (config) {
	const app = express();

	// 中间件
	app.use(cors());
	app.use(bodyParser.json());

	// 连接数据库
	const db = createDBConnection(config);

	// 创建路由
	const apiRouter = createRouters(db, config.tables);
	app.use('/api', apiRouter);

	// 错误处理
	app.use((err, req, res, next) => {
		console.error('Server Error:', err);
		res.status(500).json({ error: err.message || 'Internal Server Error' });
	});

	return app;
}

/**
 * 启动服务器
 * @param {Object} config 数据库配置
 * @param {number} port 端口号
 * @returns {Object} 服务器实例
 */
function startServer (config, port = 3000) {
	const app = createServer(config);
	const server = app.listen(port, () => {
		console.log(`Smart CRUD server running on port ${port}`);
	});

	return { app, server };
}

module.exports = {
	createServer,
	startServer
};